iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
自我挑戰組

從C到JS的同步非同步探索系列 第 16

[Day 16] IOCP Input/Output Completion Port

  • 分享至 

  • xImage
  •  

前言

今天要聊到 IOCP 也是一種非同步 IO 的處理方案, 是由 windows 提供的, 而昨天的 epoll 則是 linux 提供的非同步 IO 處理方案。不過說是處理方案, 我更覺得他們是一種排程演算法, 他們提供了一種面對非同步 IO 時調度 thread 的作法。

此外, 他們跟我們的主題有著很大的關係, 非同步 IO 不就是 JS 中最常見的非同步嗎, 這些東西的原理顯然跟 node 的實踐有所關連。

What is IOCP

https://zh.wikipedia.org/wiki/IOCP

簡單來說, IOCP 就是一種非同步監聽 IO 的方法, 其跟 linux 中的 epoll 有著差不多的關係, 而實際上我個人覺得這兩種演算法的思路也是差不多, 只是實踐上有一些分歧而已。

IOCP 提供介面讓使用者註冊事件, 也提供方法可以 non-blocking 的運行, 運行完成後觸發特定事件。

還有一個方法是使 thread 沉睡, 當事件發生時才被喚醒, 這三個工具的組合可以實踐出 IOCP modle

以下簡述流程 :

  1. 建立一個可以被使用者讀取的 queue
  2. 利用 IOCP 提供的 method 註冊事件
  3. 事件發生後使用 IOCP 提供的方法 non-blocking 的把資訊移到第一步創建的 queue
  4. 利用 IOCP 的方法沉睡的 threads 發現 queue 裡有東西, 自己醒來後取出資料與進行處理

明天進度

利用 IOCP 實踐第二天的 http server , 裡面會利用 IOCP 而擁有 schedule 機制。

明天見 !


上一篇
[Day 15] epoll
下一篇
[Day 17] IOCP 實作
系列文
從C到JS的同步非同步探索30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言